ker

ker(qm)
Func
Local mm,aa,ql,qv,kk,qf
rref(qm)àmm    (on utilise la réduction de Gauss-Jordan)
If mm=identity(colDim(mm)):return {0}    (si la réduite de Gauss-Jordan est l'identité alors le noyau est réduit à 0 (et non-pas à l'ensemble vide!) )
newMat(rowDim(qm),1)àqf
for aa,2,colDim(mm)
   newMat(colDim(mm),1)àql
   1àql[aa,1]
   mm*-qlàqv
   1àqv[aa,1]
   If isnul(mm*qv)=true then
   pgcd(mat4list(qv))àkk
   If left(string(kk),3)="gcd":1àkk
      seq(qv[i,l]/kk,i,1,rowdim(qv))àqv
      (list4mat(qv))Tàqv
      augment(qf,qv)àqf
   EndIf
EndFor
subMat(qf,1,2,rowDim(qf),colDim(qf))
EndFunc